package com.note.app.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.note.app.dto.NoteCreateDTO;
import com.note.app.dto.NoteDTO;
import com.note.app.dto.NoteUpdateDTO;
import com.note.common.domain.Note;

import java.util.List;

/**
 * 笔记服务接口
 */
public interface NoteService {

    /**
     * 创建笔记
     *
     * @param userId 用户ID
     * @param dto 创建笔记DTO
     * @return 创建的笔记ID
     */
    Long createNote(Long userId, NoteCreateDTO dto);

    /**
     * 更新笔记
     *
     * @param userId 用户ID
     * @param dto 更新笔记DTO
     * @return 更新后的笔记ID
     */
    Long updateNote(Long userId, NoteUpdateDTO dto);

    /**
     * 获取笔记详情
     *
     * @param userId 用户ID
     * @param noteId 笔记ID
     * @return 笔记详情DTO
     */
    NoteDTO getNoteDetail(Long userId, Long noteId);

    /**
     * 删除笔记
     *
     * @param userId 用户ID
     * @param noteId 笔记ID
     * @return 是否删除成功
     */
    boolean deleteNote(Long userId, Long noteId);

    /**
     * 分页查询用户笔记
     *
     * @param userId 用户ID
     * @param collectionId 收藏夹ID，可为null
     * @param current 当前页
     * @param size 每页大小
     * @return 笔记分页结果
     */
    Page<NoteDTO> getUserNotes(Long userId, Long collectionId, long current, long size);

    /**
     * 分页查询公开笔记
     *
     * @param current 当前页
     * @param size 每页大小
     * @return 公开笔记分页结果
     */
    Page<NoteDTO> getPublicNotes(long current, long size);

    /**
     * 增加笔记浏览次数
     *
     * @param noteId 笔记ID
     */
    void incrementViewCount(Long noteId);

    /**
     * 获取笔记历史版本列表
     *
     * @param userId 用户ID
     * @param noteId 笔记ID
     * @return 笔记历史版本列表
     */
    List<Integer> getNoteHistoryVersions(Long userId, Long noteId);

    /**
     * 获取指定版本的笔记
     *
     * @param userId 用户ID
     * @param noteId 笔记ID
     * @param version 版本号
     * @return 指定版本的笔记详情
     */
    NoteDTO getNoteByVersion(Long userId, Long noteId, Integer version);
} 
 